package com.check.server;

import org.apache.commons.codec.digest.DigestUtils;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.util.HashMap;
import java.util.Map;
import java.net.URL;
import java.util.Set;

public class Demo {
    /**
     * 示例代码
     * jdk：1.7+
     * 联系qq：2937743421
     */
    public static void main(String[] args) {
        Map<String, Object> params = new HashMap<>();
        params.put("uid", "******替换为你自己的UID******");   //uid 用户标识
        params.put("url", "www.ko543.com");                 //要检测的域名或链接
        params.put("timestamp", System.currentTimeMillis());//当前时间戳-毫秒
        String key = "******替换为你自己的授权KEY******";     //授权key（只用作签名计算）
        //计算签名（字符串拼接后md5）
        String signature = DigestUtils.md5Hex(params.get("uid").toString() + params.get("timestamp").toString() + key);
        params.put("signature", signature);
        //发起post请求
        String s = sendPost("http://weixin.51splus.com/v1/weixin", params);
        System.out.println(s);
    }

    public static String sendPost(String httpUrl, Map<String, Object> params) {
        HttpURLConnection connection = null;
        InputStream is = null;
        OutputStream os = null;
        BufferedReader br = null;
        String result = null;
        try {
            URL url = new URL(httpUrl);
            // 通过远程url连接对象打开连接
            connection = (HttpURLConnection) url.openConnection();
            // 设置连接请求方式
            connection.setRequestMethod("POST");
            // 设置连接主机服务器超时时间：3000毫秒
            connection.setConnectTimeout(3000);
            // 设置读取主机服务器返回数据超时时间：3000毫秒
            connection.setReadTimeout(3000);

            // 默认值为：false，当向远程服务器传送数据/写数据时，需要设置为true
            connection.setDoOutput(true);
            // 默认值为：true，当前向远程服务读取数据时，设置为true，该参数可有可无
            connection.setDoInput(true);
            // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            // 通过连接对象获取一个输出流
            os = connection.getOutputStream();
            // 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的
            Set<String> keySet = params.keySet();
            String param = "";
            for (String key : keySet) {
                param += key+"="+params.get(key)+"&";
            }
            param = param.substring(0, param.length()-1);
            os.write(param.getBytes());
            // 通过连接对象获取一个输入流，向远程读取
            if (connection.getResponseCode() == 200) {

                is = connection.getInputStream();
                // 对输入流对象进行包装:charset根据工作项目组的要求来设置
                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));

                StringBuffer sbf = new StringBuffer();
                String temp = null;
                // 循环遍历一行一行读取数据
                while ((temp = br.readLine()) != null) {
                    sbf.append(temp);
                    sbf.append("\r\n");
                }
                result = sbf.toString();
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            if (null != br) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != os) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != is) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            // 断开与远程地址url的连接
            connection.disconnect();
        }
        return result;
    }

}
